// Loesung_von_Aufgabe_6.9_6_Helium_Emissionsspektrum

float h; // Farbton
float s = 100; // Sättigung
float b; // Helligkeit
float f = 0.1644562; // Faktor

// Wellenlängen des Helium-Spektrums
float L1 = 447.15;
float L2 = 471.32;
float L3 = 492.19;
float L4 = 501.57;
float L5 = 587.57;
float L6 = 667.82;
float L7 = 706.52;

void setup()
{
  size(800, 100);
  background(0);

  // Achsenbeschriftung
  stroke(255);
  strokeWeight(3);
  line(2*400-760, 73, 2*400-760, 80);
  line(2*450-760, 73, 2*450-760, 80);
  line(2*500-760, 73, 2*500-760, 80);
  line(2*550-760, 73, 2*550-760, 80);
  line(2*600-760, 73, 2*600-760, 80);
  line(2*650-760, 73, 2*650-760, 80);
  line(2*700-760, 73, 2*700-760, 80);
  line(2*750-760, 73, 2*750-760, 80);

  fill(255);
  textSize(16);
  textAlign(CENTER);
  text("400 nm", 2*400-760, 95);
  text("450 nm", 2*450-760, 95);
  text("500 nm", 2*500-760, 95);
  text("550 nm", 2*550-760, 95);
  text("600 nm", 2*600-760, 95);
  text("650 nm", 2*650-760, 95);
  text("700 nm", 2*700-760, 95);
  text("750 nm", 2*750-760, 95);
}

void draw()
{
  // Farbraum, H-Wertebereich, Sättigungsbereich, Helligkeitsbereich
  colorMode(HSB, 360, 100, 100);

  // Berechnung der h- und b-Werte und zeichnen der Spektrallinien
  h = 360*(2.0/3.0 + f*(L1 - 440.0) / (380.0 - 440.0));
  b = 100*(0.3 + 0.7*(L1 - 380.0) / (420.0 - 380.0));
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L1-760, 70, 2*L1-760, 0);

  h = 360*(2.0/3.0 + f*(L2 - 440.0) / (380.0 - 440.0));
  b = 100*(0.3 + 0.7*(L2 - 380.0) / (420.0 - 380.0));
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L2-760, 70, 2*L2-760, 0);

  h = 360*(2.0/3.0 + f*(L3 - 440.0) / (380.0 - 440.0));
  b = 100*(0.3 + 0.7*(L3 - 380.0) / (420.0 - 380.0));
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L3-760, 70, 2*L3-760, 0);

  h = 360*(1.0/3.0 + f*(L4 - 510.0) / (490.0 - 510.0));
  b = 100;
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L4-760, 70, 2*L4-760, 0);

  h = 360*(1.0/3.0 - f*(L5 - 510.0) / (580.0 - 510.0));
  b = 100;
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L5-760, 70, 2*L5-760, 0);

  h = 360*(1.0/3.0 - f*(L6 - 510.0) / (580.0 - 510.0));
  b = 100;
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L6-760, 70, 2*L6-760, 0);

  h = 360*(1.0/3.0 - f*(L7 - 510.0) / (580.0 - 510.0));
  b = 100;
  stroke(h, s, b); // Hue-Wert, Sättigung, Helligkeit
  strokeWeight(3);
  line(2*L7-760, 70, 2*L7-760, 0);
}